package com.woniu.gf.pawn.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.gf.pawn.comm.core.domain.Image;
import com.woniu.gf.pawn.comm.core.domain.ProductBigType;
import com.woniu.gf.pawn.comm.core.domain.ProductBigTypeIdentifyImageDefinition;
import com.woniu.gf.pawn.comm.core.domain.ProductBigTypeIdentifyImageDefinitionBigType;
import com.woniu.gf.pawn.comm.core.dto.ResultDto;
import com.woniu.gf.pawn.comm.core.util.OssUntil;

import com.woniu.gf.pawn.product.dto.FindByBigTypeIdDto;
import com.woniu.gf.pawn.product.parma.*;

import com.woniu.gf.pawn.service.IProductBigTypeService;
import com.woniu.gf.pawn.service.IImageService;
import com.woniu.gf.pawn.utils.BindingResultUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;


import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author Lucas
 * @since 2020-10-13
 */
@Api(tags = "大类的控制类")
@RestController
@RequestMapping("/product-big-type")
public class ProductBigTypeController {

    @Autowired
    private IImageService iImageService;
    @Autowired
    private IProductBigTypeService iProductBigTypeService;


    /**
     * 新增大类
     * @param productBigTypeParma
     * @param result
     * @return
     * @throws Exception
     */
    @ApiOperation("大类的添加")
  @PostMapping("addProductBigType")
    public ResultDto addProductBigType(@RequestBody  @Valid AddProductBigTypeParma productBigTypeParma, BindingResult result) {
      System.out.println(productBigTypeParma);
      if(productBigTypeParma.getProductBigTypeIdentifyImageDefinitionChoice()==null||productBigTypeParma.getProductBigTypeIdentifyImageDefinitionChoice()==null||productBigTypeParma.getProductBigTypeIdentifyImageDefinitionChoice().size()!=productBigTypeParma.getProductBigTypeIdentifyImageDefinitionChoice().size())
          return ResultDto.fail(202,"新增大类失败","鉴定定义有问题");
      String bindingResult = BindingResultUtils.getBindingResult(result);
      if(bindingResult.isEmpty()){
          ProductBigType productBigType = new ProductBigType();
          Image image = new Image();
         List<ProductBigTypeIdentifyImageDefinition> productBigTypeIdentifyImageDefinitions=new ArrayList<>();
          List<ProductBigTypeIdentifyImageDefinitionBigType> productBigTypeIdentifyImageDefinitionBigTypes=new ArrayList<>();

          BeanUtils.copyProperties(productBigTypeParma,productBigType);
          for(int i=0;i<productBigTypeParma.getProductBigTypeIdentifyImageDefinitionName().size();i++){
              ProductBigTypeIdentifyImageDefinition productBigTypeIdentifyImageDefinition = new ProductBigTypeIdentifyImageDefinition();
              ProductBigTypeIdentifyImageDefinitionBigType productBigTypeIdentifyImageDefinitionBigType=new ProductBigTypeIdentifyImageDefinitionBigType();
              productBigTypeIdentifyImageDefinition.setProductBigTypeIdentifyImageDefinitionName( productBigTypeParma.getProductBigTypeIdentifyImageDefinitionName().get(i));
              productBigTypeIdentifyImageDefinitionBigType.setProductBigTypeIdentifyImageDefinitionChoice(productBigTypeParma.getProductBigTypeIdentifyImageDefinitionChoice().get(i));
              productBigTypeIdentifyImageDefinitions.add(productBigTypeIdentifyImageDefinition);
              productBigTypeIdentifyImageDefinitionBigTypes.add(productBigTypeIdentifyImageDefinitionBigType);
          }

          System.out.println(productBigType);
          BeanUtils.copyProperties(productBigTypeParma,image);
          System.out.println(image);
          iProductBigTypeService.addProductBigType(productBigType,image,productBigTypeIdentifyImageDefinitions,productBigTypeIdentifyImageDefinitionBigTypes);
          return ResultDto.success(200,"新增大类");
      }
          return ResultDto.fail(202,"新增大类失败",bindingResult);
  }


    /**
     * 大类名字是否重复
     * @param name
     * @return
     * @throws Exception
     */
    @ApiOperation("大类查询大类名字是否重复")
    @GetMapping("findName")
    public ResultDto findName(String name) throws Exception {
        ProductBigType p = iProductBigTypeService.findName(name);
        if(p!=null&&!p.getProductBigTypeId().equals(null)){
            return ResultDto.fail(202,"名字重复了或者不能为空请重新输入");
        }

        return ResultDto.success(200,"名字可以使用");
    }

    /**
     * 大类分页查询
     * @param findProductBigTypePageParam
     * @return
     */
    @ApiOperation("大类分页查询以及模糊")
    @GetMapping("findPage")
    public ResultDto findPage(@Valid FindProductBigTypePageParam findProductBigTypePageParam,BindingResult result)  {
        IPage<ProductBigType> productBigTypeIPage = iProductBigTypeService.selectPageVo(findProductBigTypePageParam);
        String bindingResult = BindingResultUtils.getBindingResult(result);
        if(!bindingResult.isEmpty())
            return ResultDto.fail(202,"查询失败",bindingResult);
        List<Integer> ids=new ArrayList<>();
        for (int i=0;i<productBigTypeIPage.getRecords().size();i++){
            ids.add(productBigTypeIPage.getRecords().get(i).getImageId());
        }

        if(ids.size()==0) return  ResultDto.success(200,"查询成功",null);


        List<Image> images  = null;
        if(ids!=null && ids.size()>0){
            images=iImageService.findByIds(ids);
        }

        List<ShowProductBigTypeParam> showProductBigTypeParamList=new ArrayList<>();
        for (int i=0;i<images.size();i++){
            ShowProductBigTypeParam showProductBigTypeParam = new ShowProductBigTypeParam();
            showProductBigTypeParam.setImageId(images.get(i).getImageId());
            showProductBigTypeParam.setImageAddr(images.get(i).getImageAddr());
            showProductBigTypeParam.setProductBigTypeId(productBigTypeIPage.getRecords().get(i).getProductBigTypeId());
            showProductBigTypeParam.setProductBigTypeComment(productBigTypeIPage.getRecords().get(i).getProductBigTypeComment());
            showProductBigTypeParam.setProductBigTypeSort(productBigTypeIPage.getRecords().get(i).getProductBigTypeSort());
            showProductBigTypeParam.setProductBigTypeName(productBigTypeIPage.getRecords().get(i).getProductBigTypeName());
            showProductBigTypeParamList.add(showProductBigTypeParam);
        }
        IPage<ShowProductBigTypeParam> showProductBigTypeParam =new Page<ShowProductBigTypeParam>();
        BeanUtils.copyProperties(productBigTypeIPage,showProductBigTypeParam);
        showProductBigTypeParam.setRecords(showProductBigTypeParamList);
        return ResultDto.success(200,"查询成功",showProductBigTypeParam);
    }


    /**
     * 删除大类
     */
    @ApiOperation("大类的删除")
    @PostMapping("deleteBigProductType")
    public  ResultDto  deleteBigProductType(@RequestBody ListIdParam listIdParam)  {
        System.out.println(listIdParam);
        if(listIdParam.getIds()==null)  return  ResultDto.fail(202,"删除失败","参数为空");
        iProductBigTypeService.deleteBigType(listIdParam.getIds());
        return  ResultDto.success(200,"删除成功");
    }


    /**
     * 修改大类
     */
    @ApiOperation("大类的修改")
    @PostMapping("updateBigProductType")
    public  ResultDto  updateBigProductType(@RequestBody @Valid UpdateProductBigTypeParam updateProductBigTypeParam,BindingResult result)  {

        String bindingResult = BindingResultUtils.getBindingResult(result);
        if(bindingResult.isEmpty()) {
            List<ProductBigTypeIdentifyImageDefinition> productBigTypeIdentifyImageDefinitions=new ArrayList<>();
            List<ProductBigTypeIdentifyImageDefinitionBigType> productBigTypeIdentifyImageDefinitionBigTypes=new ArrayList<>();
            ProductBigType productBigType = new ProductBigType();
            Image image=new Image();
            BeanUtils.copyProperties(updateProductBigTypeParam,productBigType);

            if(updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionChoice()!=null&&updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionChoice()!=null&&updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionChoice().size()==updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionChoice().size()){
                for(int i=0;i<updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionName().size();i++){
                    ProductBigTypeIdentifyImageDefinition productBigTypeIdentifyImageDefinition = new ProductBigTypeIdentifyImageDefinition();
                    ProductBigTypeIdentifyImageDefinitionBigType productBigTypeIdentifyImageDefinitionBigType=new ProductBigTypeIdentifyImageDefinitionBigType();
                    productBigTypeIdentifyImageDefinition.setProductBigTypeIdentifyImageDefinitionName( updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionName().get(i));
                    productBigTypeIdentifyImageDefinitionBigType.setProductBigTypeIdentifyImageDefinitionChoice(updateProductBigTypeParam.getProductBigTypeIdentifyImageDefinitionChoice().get(i));
                    productBigTypeIdentifyImageDefinitions.add(productBigTypeIdentifyImageDefinition);
                    productBigTypeIdentifyImageDefinitionBigTypes.add(productBigTypeIdentifyImageDefinitionBigType);
                }
            }
            BeanUtils.copyProperties(updateProductBigTypeParam,image);
            iProductBigTypeService.updateProductBigType(productBigType,productBigTypeIdentifyImageDefinitions,productBigTypeIdentifyImageDefinitionBigTypes,image);
            return ResultDto.success(200, "修改成功");
        }
        return ResultDto.fail(202, "修改大类失败","参数id为空");
    }


    /**findByIdDefinition
     * 查询鉴定图
     */
    @ApiOperation("大类的对应的鉴定定义")
    @GetMapping("findByIdDefinition")
    public  ResultDto  findByIdDefinition(Integer bigId)  {
        if(bigId==null || "".equals(bigId)) return ResultDto.fail(202,"查询鉴定失败","参数为空");
        return  ResultDto.success(200,"查询鉴定成功",iProductBigTypeService.findByIdDefinition(bigId));
    }

    /**
     * 根据选择的商品大类获取所需鉴定图类型集合，商品小类集合，品牌集合，属性类型下属性及值集合
     * @param bigTypeId
     * @return
     */
    @GetMapping("findAllByBigTypeId/{bigTypeId}")
    public ResultDto findAllByBigTypeId(@PathVariable("bigTypeId")Integer bigTypeId){
        FindByBigTypeIdDto findByBigTypeIdDto=iProductBigTypeService.findAllByBigTypeId(bigTypeId);

        return ResultDto.success(200,"查询成功",findByBigTypeIdDto);
    }
    /**
     * 查询所有大类
     */
    @GetMapping("findAllBigType")
    public ResultDto findAllBigType(){
        List<ProductBigType> productBigTypes =iProductBigTypeService.findAllBigType();

        return ResultDto.success(200,"查询成功",productBigTypes);
    }



}

